#include "./63MembersOfTheTemplateInSplit.hpp"

// ----------------------------------------------------------------
// 这里演示的是使用成员函数的分离式写法,因为涉及到两个typename/class,需要在所有方法前面声明

// 因为在类中是嵌套的,所以必须使用嵌套的方法


// 这里我犯了错误,应该使用这样的写法,不是不能实现
template <typename T>
    template <typename V>
        beta<T>::hold<V>::hold(V value) : value(value) {}

template <typename T>
    template <typename V>
        void beta<T>::hold<V>::show() const { std::cout << std::endl;} // 使用cout对象智能识别对象类型

template <typename T>
    template <typename V>
        V beta<T>::hold<V>::Value() const { return value; }

template <typename T>
    beta<T>::beta(T t,int i) : q(t), n(i) {}

template <typename T>
    template <typename U>
    // 返回值类型  命名空间<泛型>::函数名 (参数列表) { 函数实现 }
        U beta<T>::blab(U u, T t) {
            return n.Value() + q.Value() * u/t;
        }


int main(int argc, char const *argv[])
{
    beta<double> guy(3.5, 3);
    cout << "T was set to double" << endl;
    cout << "T was set to T, which is double , then V was set to int \n";
    cout << guy.blab(10, 2.3) << endl;
    cout << "U was set to int \n";
    cout << guy.blab(10.0, 2.3) << endl;
    cout << "U was set to double \n";
    cout << "done!";
    return 0;
}
